//package com.lf.weixinOriginPay;
//
//import com.alibaba.druid.util.StringUtils;
//import com.alibaba.fastjson.JSONObject;
//import com.lf.weixinOriginPay.sdk.*;
//import com.lf.weixinOriginPay.value.StaticValue;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.data.redis.core.StringRedisTemplate;
//import org.springframework.stereotype.Controller;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RequestMethod;
//import org.springframework.web.bind.annotation.RequestParam;
//import org.springframework.web.bind.annotation.ResponseBody;
//
//import javax.annotation.Resource;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import javax.servlet.http.HttpSession;
//import java.io.IOException;
//import java.net.URLEncoder;
//import java.util.Date;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.concurrent.TimeUnit;
//
///**
// * Created by gxl on 2018/5/3.
// */
//
//@Controller
//@RequestMapping("/TougaoPay")
//public class TougaoPayController {
//
//
//    private Logger logger = LoggerFactory.getLogger(this.getClass());
//    private WeixinUtil weixinUtil = WeixinUtil.getIstance();
//
//    @Resource
//    private StringRedisTemplate redisTemplate;
//
//
//
//    /**
//     * 微信支付，多公众号测试接口
//     * @param response
//     * @param amount
//     */
//    @RequestMapping(value = "/weixinpaytest")
//    public void weixinpaytest(HttpServletRequest request, HttpServletResponse response, Integer amount){
//
//        if (amount < 1){
//            return ;
//        }
//
////        redisTemplate.opsForHash().put("returnUrl","returnUrl",returnUrl);
//
//
//        Map<String,String> data = new HashMap<String, String>();
//        data.put("body",  "文玩核桃会员充值");
//        data.put("out_trade_no",WXPayUtil.generateNonceStr());
//        data.put("fee_type", "CNY");
//        data.put("total_fee",String.valueOf(amount));
//        data.put("spbill_create_ip", "192.168.0.1");
//        data.put("notify_url", StaticValue.WX.BASE_URL + "/TougaoPay/weixinpaynotiy");//通知回调接口
//        data.put("product_id", "WW"+WXPayUtil.generateNonceStr());
//
//        String result = HttpUtils.sendPost("http://www.wwhtjy.com/wenwan-search-web/TougaoPay/api2",data);
//        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(result);
//
//        String turnUrl = json.getJSONObject("data").getString("turnUrl");
//
//        try {
//            response.sendRedirect(turnUrl);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//
//    }
//
//    /**
//     *
//     * 微信支付，多公众号，通知回调接口
//     *
//     * @param request
//     * @param response
//     * @return
//     */
//    @RequestMapping(value = "/weixinpaynotiy")
//    @ResponseBody
//    public String weixinpaynotiy(HttpServletRequest request, HttpServletResponse response){
//
//        logger.info("=============================================================weixinnotiy======================================================================");
//
//        // 获取微信POST过来反馈信息
//        System.out.print("微信支付回调获取数据开始");
//        logger.debug("微信支付回调获取数据开始");
////        HttpServletRequest request = getRequest();
//        String inputLine;
//        String notityXml = "";
//        try {
//
//            while ((inputLine = request.getReader().readLine()) != null) {
//                notityXml += inputLine;
//            }
//            request.getReader().close();
//        } catch (Exception e) {
//            logger.debug("xml获取失败：" + e);
////            throw new ServiceException(39, "xml获取失败！");
//
//        }
//        System.out.println("接收到的报文：" + notityXml);
//        logger.debug("收到微信异步回调：");
//        logger.debug(notityXml);
//        if(StringUtils.isEmpty(notityXml)){
//            logger.debug("xml为空：");
////            throw new ServiceException(39, "xml为空！");
//
//        }
//        logger.info("微信支付成功后返回来的数据，格式为xml:     "+notityXml);
////        Map m = parseXmlToList2(notityXml);
////        String appid = m.get("appid").toString();
////        String bank_type = m.get("bank_type").toString();
////        String cash_fee = m.get("cash_fee").toString();
////        String fee_type = m.get("fee_type").toString();
////        String is_subscribe = m.get("is_subscribe").toString();
////        String mch_id = m.get("mch_id").toString();
////        String nonce_str = m.get("nonce_str").toString();
////        String openid = m.get("openid").toString();
////        String out_trade_no = m.get("out_trade_no").toString();
////        String result_code = m.get("result_code").toString();
////        String return_code = m.get("return_code").toString();
////        String sign = m.get("sign").toString();
////        String time_end = m.get("time_end").toString();
////        String total_fee = m.get("total_fee").toString();
////        String trade_type = m.get("trade_type").toString();
////        String transaction_id = m.get("transaction_id").toString();
//
////        SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
//
////        parameters.put("appid", appid);
////        parameters.put("bank_type", bank_type);
////        parameters.put("cash_fee", cash_fee);
////        parameters.put("fee_type", fee_type);
////        parameters.put("is_subscribe", is_subscribe);
////        parameters.put("mch_id", mch_id);
////        parameters.put("nonce_str", nonce_str);
////        parameters.put("openid", openid);
////        parameters.put("out_trade_no", out_trade_no);
////        parameters.put("result_code", result_code);
////        parameters.put("return_code", return_code);
////        parameters.put("time_end", time_end);
////        parameters.put("total_fee", total_fee);
////        parameters.put("trade_type", trade_type);
////        parameters.put("transaction_id", transaction_id);
////        String characterEncoding = "UTF-8";
////        String mySign = createSign(characterEncoding, parameters);
////        System.out.println("我     的签名是：" + mySign);
////        logger.debug("我     的签名是：" + mySign);
////        logger.debug("WeChat     的签名是：" + sign);
////        if (sign.equals(mySign)) {
////            System.out.println("签名一致");
////            logger.debug("签名一致");
////
////        } else {
////            System.out.println("签名不一致");
////            logger.debug("签名不一致");
////            throw new ServiceException(39, "签名不一致！");
////        }
////        if (!"SUCCESS".equals(result_code)) {
////            throw new ServiceException(31, "微信返回的交易状态不正确（result_code=" + result_code + "）");
////        }
////        return common_Transaction(out_trade_no, RechargeState.SUCC);
//
//        return "success";//返回success，表示告诉微信我已经接收到了，不用再尝试通知我了。
//
//    }
//
//    /**
//     * 对外提供支付接口（对于接入者来说，我们是第三方）,这个接口和api不一样，这个接口可以配置多个公众号，自由切换
//     * @param request
//     * @param response
//     */
//    @RequestMapping(value = "/api2",method = RequestMethod.POST)
//    @ResponseBody
//    public JSONObject payapi2(HttpServletRequest request, HttpServletResponse response,
//                              String out_trade_no, String total_fee,
//                              String product_id, String fee_type,
//                              String body, String notify_url, String spbill_create_ip){
//
//
//        JSONObject data = new JSONObject();
//
//        String userSession = "tougaoUserSsession:three_"+WXPayUtil.generateNonceStr();//身份识别标识，随机生产，唯一
//
//        data.put("body",  body);
//        data.put("out_trade_no",out_trade_no);
//        data.put("device_info","WEB");
//        data.put("openid","openid");
//        data.put("fee_type", fee_type);
//        data.put("total_fee",total_fee);
//        data.put("spbill_create_ip", spbill_create_ip);
//        data.put("notify_url", notify_url);
//        data.put("trade_type", "JSAPI");  // 此处指定为扫码支付
//        data.put("product_id", product_id);
//
//        redisTemplate.opsForHash().put(userSession,userSession,data.toString());
//
//        redisTemplate.expire(userSession,2*60,TimeUnit.SECONDS);
//
//
//        String turnUrl = StaticValue.WX.BASE_URL + "/TougaoPay/centerTurn?userSession="+userSession;
//
//        JSONObject redata = new JSONObject();
//        redata.put("turnUrl",turnUrl);
//
//        logger.info("turnUrl" + turnUrl);
//
//        return JSONUtils.getRoot(0,"SS",redata);
//
//
//    }
//
//    @RequestMapping(value = "/centerTurn")
//    public void centerTurn(HttpServletResponse response, String userSession){
//
//        try {
//            String shareUrl = StaticValue.WX.ShareUrl.
//                    replace("APPID", StaticValue.WX.AppId).
//                    replace("REDIRECT_URI", URLEncoder.encode(StaticValue.WX.BASE_URL + "/TougaoPay/loginCallBack","UTF-8")).
//                    replace("SCOPE",StaticValue.WX.NO_USER_INFO_SCOPE).
//                    replace("STATE",userSession);
//
//            logger.info("跳转到微信:" + shareUrl);
//
//            response.sendRedirect(shareUrl);
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//
//    }
//
//    @RequestMapping(value = "/loginCallBack")
//    public void loginCallBack(@RequestParam String code, @RequestParam String state, HttpServletResponse response) throws Exception {
//
//        logger.info("code=" + code + " state=" + state);
//
//        OAuthAccessToken accessToken = weixinUtil.getOAuthAccessToken(StaticValue.WX.AppId, StaticValue.WX.AppSecret, code);
//        accessToken = weixinUtil.refershOAuthAccessToken(StaticValue.WX.AppId, accessToken.getRefreshToken());//刷新accessTokenn
//        String openID = accessToken.getOpenid();
//
//        logger.info("openID=" + openID);
//
//        net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(redisTemplate.opsForHash().get(state,state));
//        data.put("openid",openID);
//        redisTemplate.opsForHash().put(state,state,data.toString());
//
//        String lastUrl = StaticValue.WX.BASE_URL + "/TougaoPay/payhtml2?user="+state;
//        //用户最终请求的支付地址
//        logger.info("====");
//        logger.info("====");
//        logger.info("用户最终请求的支付地址 : "+ lastUrl);
//        logger.info("====");
//        logger.info("====");
////        return JSONUtils.getRoot(0,"success",lastUrl);
//        response.sendRedirect(lastUrl);
//
//    }
//
//    @RequestMapping(value = "/payhtml2")
//    public void payhtml2(HttpServletRequest request, HttpServletResponse response, String user){
//
////        net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(redisTemplate.opsForHash().get(user,user));
////        String returnUrl = (String) redisTemplate.opsForHash().get("returnUrl","returnUrl");
//
//        request.getSession().setAttribute(StaticValue.PAY_USER_SESSION,user);
//        request.getSession().setMaxInactiveInterval(60000);
//
//
//        try {
//            response.sendRedirect(StaticValue.WX.BASE_URL + "/wxpay/wx3s2.html");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 对外提供支付接口（对于接入者来说，我们是第三方），公众号固定
//     * @param request
//     * @param response
//     */
//    @RequestMapping(value = "/api",method = RequestMethod.POST)
//    @ResponseBody
//    public JSONObject payapi(HttpServletRequest request, HttpServletResponse response,
//                             String body, String out_trade_no, String openid,
//                             String fee_type, String total_fee, String spbill_create_ip, String notify_url, String produce_id){
//
//        JSONObject data = new JSONObject();
//
//        String userSession = "three_"+WXPayUtil.generateNonceStr();//身份识别标识，随机生产，唯一
//
//        data.put("body",  body);
//        data.put("out_trade_no",out_trade_no);
//        data.put("device_info","WEB");
//        data.put("openid",openid);
//        data.put("fee_type", fee_type);
//        data.put("total_fee",total_fee);
//        data.put("spbill_create_ip", spbill_create_ip);
//        data.put("notify_url", notify_url);
//        data.put("trade_type", "JSAPI");  // 此处指定为扫码支付
//        data.put("product_id", produce_id);
//
//        redisTemplate.opsForHash().put(userSession,"aa",data.toString());
//
//        return JSONUtils.getRoot(0,"success",StaticValue.WX.BASE_URL + "/TougaoPay/payhtml?user="+userSession);
//
//    }
//
//    @RequestMapping(value = "/payhtml")
//    public void payhtml(HttpServletRequest request, HttpServletResponse response, String user){
//
////        net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(redisTemplate.opsForHash().get(user,user));
////        redisTemplate.opsForHash().delete(user,user);
//        request.getSession().setAttribute(StaticValue.PAY_USER_SESSION,user);
//        request.getSession().setMaxInactiveInterval(60000);
//
//        try {
//            response.sendRedirect(StaticValue.WX.BASE_URL + "/wxpay/wx3.html");
//        } catch (IOException e) {
//            e.printStackTrace();
//        }
//    }
//
//    /**
//     * 微信第三方支付
//     * @param request
//     * @return
//     */
//    @RequestMapping(value = "/ThreePay",method = RequestMethod.POST)
//    @ResponseBody
//    public JSONObject ThreePay(HttpServletRequest request){
////
//        logger.info("进入ThreePay函数了");
//
//
//        MyConfig config = null;
//        try {
//            config = new MyConfig();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        WXPay wxpay = null;
//        try {
//            wxpay = new WXPay(config);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
////        User user = (User)session.getAttribute(FootBall.FOOT_USER_SESSION);
//        String timeStamp = String.valueOf(new Date().getTime());
//
//        String userSession = (String) request.getSession().getAttribute(StaticValue.PAY_USER_SESSION);
//
//        if (!redisTemplate.hasKey(userSession)){
//            return JSONUtils.getRoot(2,"數據緩存為空","");
//        }
//        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject(redisTemplate.opsForHash().get(userSession, userSession));
//
//
//
//        redisTemplate.opsForHash().delete(userSession,userSession);
////        net.sf.json.JSONObject json = net.sf.json.JSONObject.fromObject();
//        logger.info("=================");
//        logger.info("=================");
//        logger.info("=================");
//        logger.info("jsonobject================="+ json);
//        logger.info("=================");
//        logger.info("=================");
//        logger.info("=================");
//
//        Map<String, String> data = new HashMap<String, String>();
//        data.put("body", json.getString("body"));
//        data.put("out_trade_no", json.getString("out_trade_no"));
//        data.put("device_info",json.getString("device_info"));
//        data.put("openid",json.getString("openid"));
//        data.put("fee_type", json.getString("fee_type"));
//        data.put("total_fee", json.getString("total_fee"));
//        data.put("spbill_create_ip", json.getString("spbill_create_ip"));
//        data.put("notify_url", json.getString("notify_url"));
//        data.put("trade_type", json.getString("trade_type"));  // 此处指定为扫码支付
//        data.put("product_id", json.getString("product_id"));
//
//
//        try {
//            Map<String, String> resp = wxpay.unifiedOrder(data);
//            System.out.println(resp);
//
//            Map<String, String> data2 = new HashMap<String, String>();
//            data2.put("appId", StaticValue.WX.AppId);
//            data2.put("timeStamp", timeStamp);
//            data2.put("nonceStr", WXPayUtil.generateUUID());
//            data2.put("package","prepay_id="+resp.get("prepay_id"));
//            data2.put("signType", "MD5");
//            String paySign = WXPayUtil.generateSignature(data2,config.getKey());
//            data2.put("paySign",paySign);
//            logger.info("=====================data2======================");
//            System.out.println(data2);
//
//            return JSONUtils.getRoot(0,"success",data2);
//
//        } catch (Exception e) {
//
//            logger.info("====================="+e.getMessage()+"======================");
//            logger.info("====================="+e.getMessage()+"======================");
//            logger.info("====================="+e.getMessage()+"======================");
//
//            return JSONUtils.getRoot(1,e.getMessage(),"");
//
//        }
//    }
//
//    /**
//     * 微信支付获取相关签名信息
//     * @param session
//     * @param url
//     * @return
//     */
//    @RequestMapping(value = "/getweixinjs" ,method = RequestMethod.POST)
//    @ResponseBody
//    public JSONObject getweixinjs(HttpSession session, String url){
//
//        WeChatTask.ACCESS_TOKEN =  JSONObject.parseObject(HttpUtils.sendGet("http://www.wwhtjy.com/wei/xin/public/get/access/token",new HashMap<String,String>())).getJSONObject("data").getString("access_token");
//        WeChatTask.JSAPI_TICKET =  JSONObject.parseObject(HttpUtils.sendGet("http://www.wwhtjy.com/wei/xin/public/get/jsapi/ticket",new HashMap<String,String>())).getJSONObject("data").getString("ticket");
//
//
//        logger.info("进入getweixinjs函数了");
//        HashMap<String,String> hm = new HashMap<String,String>();
//        try {
//            hm = JSSDK_Config.jsSDK_Sign(url);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        logger.info("=====================JSONObject.toJSON(hm)======================");
//        System.out.print(JSONObject.toJSON(hm));
//        return JSONUtils.getRoot(0,"success", JSONObject.toJSON(hm));
//
//    }
//
//    /**
//     * 微信原生支付
//     * @param request
//     * @return
//     */
//    @RequestMapping(value = "/WXPay",method = RequestMethod.GET)
//    @ResponseBody
//    public JSONObject WXPay(HttpServletRequest request){
////
//        logger.info("进入WXPay函数了，这个函数是属于原生支付");
//        int realmoney = 500;
//
//        MyConfig config = null;
//        try {
//            config = new MyConfig();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        WXPay wxpay = null;
//        try {
//            wxpay = new WXPay(config);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
////        User user = (User)session.getAttribute(FootBall.FOOT_USER_SESSION);
//        String timeStamp = String.valueOf(new Date().getTime());
//
//        Map<String, String> data = new HashMap<String, String>();
//        data.put("body", "充值");
//        data.put("out_trade_no", WXPayUtil.generateUUID());
//        data.put("device_info", "WEB");
//        data.put("openid","oKQON0VAjOXXH5A3Lz1Pyl_gAmsE");
//        data.put("fee_type", "CNY");
//        data.put("total_fee", String.valueOf(realmoney));
////        data.put("spbill_create_ip", CusAccessObjectUtil.getIpAddress(request));
//        data.put("spbill_create_ip", "192.168.0.1");
//
//        try {
//            data.put("notify_url", StaticValue.WX.BASE_URL + "/TougaoPay/payNoticy");
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//        data.put("trade_type", "JSAPI");  // 此处指定为扫码支付
//        data.put("product_id", "fb"+WXPayUtil.generateUUID());
//
//
//        try {
//            Map<String, String> resp = wxpay.unifiedOrder(data);
//            System.out.println(resp);
//
//            Map<String, String> data2 = new HashMap<String, String>();
//            data2.put("appId", StaticValue.WX.AppId);
//            data2.put("timeStamp", timeStamp);
//            data2.put("nonceStr", WXPayUtil.generateUUID());
//            data2.put("package","prepay_id="+resp.get("prepay_id"));
//            data2.put("signType", "MD5");
//            String paySign = WXPayUtil.generateSignature(data2,config.getKey());
//            data2.put("paySign",paySign);
//            logger.info("=====================data2======================");
//            System.out.println(data2);
//
//            return JSONUtils.getRoot(0,"success",data2);
//        } catch (Exception e) {
//            e.printStackTrace();
//            return JSONUtils.getRoot(1,"faild","");
//        }
//    }
//
//    @RequestMapping(value = "/payNoticy",method = RequestMethod.POST)
//    @ResponseBody
//    public String payNoticy(HttpServletRequest request){
//
//        return "succee";
//    }
//
//}
